﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestAOP
{
    /// <summary>
    /// 客户端向服务器端发命令（服务器为winNT系统）
    /// </summary>
    public class RemoteCommandHandler : RemoteCommandSpace.RemoteCommand.Iface
    {
        bool result = false;
        public bool Send(RemoteCommandSpace.RemoteCommandData remoteCommandData)
        {
            if (!string.IsNullOrWhiteSpace(remoteCommandData.Data))
                try
                {
                    RunCmd(remoteCommandData.Data);
                    return true;
                }
                catch (Exception)
                {
                    throw;
                }

            return result;
        }

        /// <summary>
        /// 执行winNT命令
        /// </summary>
        /// <param name="command"></param>
        /// <returns></returns>
        void RunCmd(string command)
        {
            //实例一个Process类，启动一个独立进程  
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";           //设定程序名  
            p.StartInfo.Arguments = "/c \"" + command + "\"";    //设定程式执行参数  
            p.StartInfo.UseShellExecute = false;        //关闭Shell的使用  
            p.StartInfo.RedirectStandardInput = true;   //重定向标准输入  
            p.StartInfo.RedirectStandardOutput = true;  //重定向标准输出  
            p.StartInfo.RedirectStandardError = true;   //重定向错误输出  
            p.StartInfo.CreateNoWindow = true;          //设置显示窗口  

            p.Start();   //启动  
            p.StandardInput.WriteLine("exit");        //不过要记得加上Exit要不然下一行程式执行的时候会当机  

        }
    }
}
